package com.ruoyi.iot.domain;


import java.io.Serializable;
import java.util.Date;
import java.util.List;

import jakarta.validation.constraints.NotBlank;
import lombok.Data;

@Data
public class Product implements Serializable {

    private static final long serialVersionUID = 1L;
    
    private Long id;

    private Long createBy;

    @NotBlank(message = "名称不能为空")
    private String name;

    /**
     *  key 创建以后只能删除，不能修改
     *  不能纯数字
     */
    private String key;

    
    private String img;

    
    private String secret;

    /**
    * 数据字典 
    * 0: 直连设备
    * 1: 网关设备
    * 2：网关子设备
    * 3：摄像头监控
    * 4：录像机
    */
    @NotBlank(message = "节点类型不能为空")
    private String nodeType;

    /**
     * 连网方式：数据字典 
     * LORA：LoRaWAN。
     * WIFI： Wi-Fi。
     * CELLULAR：蜂窝网。
     * ETHERNET：以太网。
     * OTHER：其他。
     * 若不传入此参数，则默认为Wi-Fi
     * 
     */
    @NotBlank(message = "连网方式不能为空")
    private String netType;

    /**
     * 数据字典 产品发布以后，不能修改，通道和数据项也不能修改
     */
    private String status;

    @NotBlank(message = "产品描述不能为空")
    private String description;

    /**
     * 数据字典 
     * 设备登录认证方式
     * 1:校验
     * 2:不校验
     */
    private String validateType;


    /**
     * 公司
     */
    private String conpany;

    /**
     * 型号
     */
    private String model;

    /**
     * 转换解析服务标识
     * 消息队列标识，下发命令时会把命令转发到对应的转换服务队列中
     */
    private String transformService;

    /**
     * 上报数据格式：
     * CUSTOM_FORMAT：自定义
     * ALINK_FORMAT: JSON
     * 透传如果是字节需要自己处理大小端问题
     */
    @NotBlank(message = "上报数据格式不能为空")
    private String dataFormat;

    // 所有行业分类，来源数据字典
    private String categoryValue;

    private String authType;

    private Date createTime;

    private Date updateTime;

    /**
     * 协议类型
     * modbus：Modbus协议。
     * opc-ua：OPC UA协议。
     * customize：自定义协议。
     * ble：BLE协议。
     * zigbee：ZigBee协议。
     */
    private String protocolType;

    /**
     * 乐观锁版本号
     */
    private Long  version;

    /**
     * 通道列表，该字段不存在数据库
     */
    private List<Channel> channels;
}